package core;

import java.rmi.Remote;
import java.rmi.RemoteException;
import java.util.ArrayList;

public interface PizzaStoreFacadeInterface extends Remote{
	
	/* Menu Methods */
	public int addMenuItem(String name, String price, MenuItemType type, String description) throws RemoteException;
	public void clearMenu() throws RemoteException;
	public String getMenuItemDescription(int itemId) throws RemoteException;
	public String getMenuItemName(int itemId) throws RemoteException;
	public String getMenuItemPrice(int itemId) throws RemoteException;
	public ArrayList<Integer> getMenuItems() throws RemoteException;
	public ArrayList<Integer> getMenuItemsByType(MenuItemType type) throws RemoteException;
	public MenuItemType[] getMenuItemTypeValues() throws RemoteException;
	public int getNumberMenuItems() throws RemoteException;
	public void removeMenuItemById(int id) throws RemoteException;
	/* Daily Special */
	public void setDailySpecial(String name, String price, MenuItemType type, String description) throws RemoteException;
	public String getDailySpecialName() throws RemoteException;
	public String getDailySpecialPrice() throws RemoteException;
	public String getDailySpecialDescription() throws RemoteException;
	
	/* Order Methods */
	public int addItemToOrder(int orderId, int menuItemId, int quantity) throws RemoteException;
	public int getFirstSubmittedOrderId() throws RemoteException;
	public ArrayList<Integer> getFirstSubmittedOrderItems() throws RemoteException;
	public int getOrderItemQuantity(int orderId, int itemId) throws RemoteException;
	public int getPendingOrderCouponId(int orderId) throws RemoteException;
	public String getPendingOrderToHtmlString(int orderId) throws RemoteException;
	public boolean getPendingOrderDelivery(int orderId) throws RemoteException;
	public int getSubmitedOrderCouponId(int orderId) throws RemoteException;
	public ArrayList<Integer> getSubmittedOrderItems(int orderId) throws RemoteException;
	public String getSubmittedOrderToHtmlString(int orderId) throws RemoteException;
	public ArrayList<Integer> getSubmittedOrders() throws RemoteException;
	public int markOrderComplete(int orderID) throws RemoteException;
	public void setOrderCoupon(int orderId, int couponId) throws RemoteException;
	public int startNewOrder(String customerUsername, boolean delivery) throws RemoteException;
	public void submitOrder(int orderId) throws RemoteException;
	public boolean submittedOrdersEmpty() throws RemoteException;
	
	/*Transaction Methods */
	public String getCustomerNameByTransaction(int transactionID) throws RemoteException;
	public ArrayList<Integer> getCompleteTransactions() throws RemoteException;
	public ArrayList<Integer> getPendingTransactions() throws RemoteException;
	public ArrayList<Integer> getPendingTransactionItems(int transactionID) throws RemoteException;
	public ArrayList<Integer> getCompleteTransactionItems(int transactionID) throws RemoteException;
	public int getTransactionItemQuantity(int transactionID, int itemId) throws RemoteException;
	public String getTransacationTotal(int transactionID) throws RemoteException;
	public String getTransactionReciept(int transactionID) throws RemoteException;
	public Boolean markTransactionIncomplete(int transactionID) throws RemoteException;
	public String renderCashPayment(int transactionID, String amount) throws RemoteException;
	public String renderCreditPayment(int transactionID, String cardNumber, String expirationDate) throws RemoteException;
	public boolean isTransactionComplete(int transactionID) throws RemoteException;
	public boolean isTransactionPending(int transactionID) throws RemoteException;
	
	
	/*Coupon Methods*/
	public void addCoupon(int itemId, int pointValue) throws RemoteException;
	public ArrayList<Integer> getCouponIds() throws RemoteException;
	public int getCouponPoints(int couponId) throws RemoteException;
	public ArrayList<Integer> getCustomerCouponIds(String username) throws RemoteException;
	public String getDollarsPerPoint() throws RemoteException;
	public void removeCoupon(int itemId) throws RemoteException;
	public void setDollarsPerPoint(String money, int points) throws RemoteException;
	
	/*Customer Methods*/
	public String createCustomer(String name, String street, String cityState, String zip, String username) throws RemoteException;	
	public boolean customerExists(String username) throws RemoteException;
	public String getCustomerName(String customerUsername) throws RemoteException;
	public int getCustomerPointsByUserName(String username) throws RemoteException;
	public ArrayList<Integer> getCustomerOrderHistory(String username) throws RemoteException;
}
